[404218]: / Code / Tensor Network vs FC Explainability / Dataset 3 / DS3 6FC TPU kkawchak.ipynb

Download this file

1268 lines (1268 with data), 136.9 kB

{
  "nbformat": 4,
  "nbformat_minor": 0,
  "metadata": {
    "colab": {
      "provenance": [],
      "machine_shape": "hm",
      "gpuType": "V28"
    },
    "kernelspec": {
      "name": "python3",
      "display_name": "Python 3"
    },
    "accelerator": "TPU"
  },
  "cells": [
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "8XnVMPBXmtRa"
      },
      "source": [
        "# TensorNetworks in Neural Networks.\n",
        "\n",
        "Here, we have a small toy example of how to use a TN inside of a fully connected neural network.\n",
        "\n",
        "First off, let's install tensornetwork"
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "7HGRsYNAFxME"
      },
      "source": [
        "# !pip install tensornetwork\n",
        "\n",
        "import numpy as np\n",
        "import matplotlib.pyplot as plt\n",
        "import tensorflow as tf\n",
        "# Import tensornetwork\n",
        "import tensornetwork as tn\n",
        "import random\n",
        "import time\n",
        "import pandas as pd\n",
        "# Set the backend to tesorflow\n",
        "# (default is numpy)\n",
        "tn.set_default_backend(\"tensorflow\")\n",
        "np.random.seed(42)\n",
        "random.seed(42)\n",
        "tf.random.set_seed(42)\n",
        "# Explainability code assistance aided by ChatGPT3.5\n",
        "# 2021 Kelly, D. TensorFlow Explainable AI tutorial https://www.youtube.com/watch?v=6xePkn3-LME"
      ],
      "execution_count": 35,
      "outputs": []
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "g1OMCo5XmrYu"
      },
      "source": [
        "# TensorNetwork layer definition\n",
        "\n",
        "Here, we define the TensorNetwork layer we wish to use to replace the fully connected layer. Here, we simply use a 2 node Matrix Product Operator network to replace the normal dense weight matrix.\n",
        "\n",
        "We TensorNetwork's NCon API to keep the code short."
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "wvSMKtPufnLp"
      },
      "source": [
        "class TNLayer(tf.keras.layers.Layer):\n",
        "\n",
        "  def __init__(self):\n",
        "    super(TNLayer, self).__init__()\n",
        "    # Create the variables for the layer.\n",
        "    self.a_var = tf.Variable(tf.random.normal(shape=(32, 32, 2),\n",
        "                                              stddev=1.0/32.0),\n",
        "                             name=\"a\", trainable=True)\n",
        "    self.b_var = tf.Variable(tf.random.normal(shape=(32, 32, 2),\n",
        "                                              stddev=1.0/32.0),\n",
        "                             name=\"b\", trainable=True)\n",
        "    self.bias = tf.Variable(tf.zeros(shape=(32, 32)),\n",
        "                            name=\"bias\", trainable=True)\n",
        "\n",
        "  def call(self, inputs):\n",
        "    # Define the contraction.\n",
        "    # We break it out so we can parallelize a batch using\n",
        "    # tf.vectorized_map (see below).\n",
        "    def f(input_vec, a_var, b_var, bias_var):\n",
        "      # Reshape to a matrix instead of a vector.\n",
        "      input_vec = tf.reshape(input_vec, (32, 32))\n",
        "\n",
        "      # Now we create the network.\n",
        "      a = tn.Node(a_var)\n",
        "      b = tn.Node(b_var)\n",
        "      x_node = tn.Node(input_vec)\n",
        "      a[1] ^ x_node[0]\n",
        "      b[1] ^ x_node[1]\n",
        "      a[2] ^ b[2]\n",
        "\n",
        "      # The TN should now look like this\n",
        "      #   |     |\n",
        "      #   a --- b\n",
        "      #    \\   /\n",
        "      #      x\n",
        "\n",
        "      # Now we begin the contraction.\n",
        "      c = a @ x_node\n",
        "      result = (c @ b).tensor\n",
        "\n",
        "      # To make the code shorter, we also could've used Ncon.\n",
        "      # The above few lines of code is the same as this:\n",
        "      # result = tn.ncon([x, a_var, b_var], [[1, 2], [-1, 1, 3], [-2, 2, 3]])\n",
        "\n",
        "      # Finally, add bias.\n",
        "      return result + bias_var\n",
        "\n",
        "    # To deal with a batch of items, we can use the tf.vectorized_map\n",
        "    # function.\n",
        "    # https://www.tensorflow.org/api_docs/python/tf/vectorized_map\n",
        "    result = tf.vectorized_map(\n",
        "        lambda vec: f(vec, self.a_var, self.b_var, self.bias), inputs)\n",
        "    return tf.nn.relu(tf.reshape(result, (-1, 1024)))"
      ],
      "execution_count": 36,
      "outputs": []
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "V-CVqIhPnhY_"
      },
      "source": [
        "# Smaller model\n",
        "These two models are effectively the same, but notice how the TN layer has nearly 10x fewer parameters."
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "bbKsmK8wIFTp",
        "outputId": "1a191e13-92dc-452b-9359-aec6152e9cc2",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 0
        }
      },
      "source": [
        "Dense = tf.keras.layers.Dense\n",
        "tn_model = tf.keras.Sequential(\n",
        "    [\n",
        "     tf.keras.Input(shape=(2,)),\n",
        "     Dense(1024, activation=tf.nn.relu),\n",
        "     # Start Modified Layers\n",
        "     Dense(1024, activation=tf.nn.relu),\n",
        "     Dense(1024, activation=tf.nn.relu),\n",
        "     Dense(1024, activation=tf.nn.relu),\n",
        "     Dense(1024, activation=tf.nn.relu),\n",
        "     Dense(1024, activation=tf.nn.relu),\n",
        "     Dense(1024, activation=tf.nn.relu),\n",
        "     # Finish Modified Layers\n",
        "     Dense(1, activation=None)])\n",
        "tn_model.summary()"
      ],
      "execution_count": 37,
      "outputs": [
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "Model: \"sequential_3\"\n",
            "_________________________________________________________________\n",
            " Layer (type)                Output Shape              Param #   \n",
            "=================================================================\n",
            " dense_24 (Dense)            (None, 1024)              3072      \n",
            "                                                                 \n",
            " dense_25 (Dense)            (None, 1024)              1049600   \n",
            "                                                                 \n",
            " dense_26 (Dense)            (None, 1024)              1049600   \n",
            "                                                                 \n",
            " dense_27 (Dense)            (None, 1024)              1049600   \n",
            "                                                                 \n",
            " dense_28 (Dense)            (None, 1024)              1049600   \n",
            "                                                                 \n",
            " dense_29 (Dense)            (None, 1024)              1049600   \n",
            "                                                                 \n",
            " dense_30 (Dense)            (None, 1024)              1049600   \n",
            "                                                                 \n",
            " dense_31 (Dense)            (None, 1)                 1025      \n",
            "                                                                 \n",
            "=================================================================\n",
            "Total params: 6301697 (24.04 MB)\n",
            "Trainable params: 6301697 (24.04 MB)\n",
            "Non-trainable params: 0 (0.00 Byte)\n",
            "_________________________________________________________________\n"
          ]
        }
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "GWwoYp0WnsLA"
      },
      "source": [
        "# Training a model\n",
        "\n",
        "You can train the TN model just as you would a normal neural network model! Here, we give an example of how to do it in Keras."
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "qDFzOC7sDBJ-"
      },
      "source": [
        "# Generate points forming a spiral\n",
        "theta = np.linspace(0, 4*np.pi, 480)\n",
        "r = np.linspace(0, 1, 480)\n",
        "\n",
        "x = r * np.sin(theta)\n",
        "y = r * np.cos(theta)\n",
        "\n",
        "X = np.column_stack((x, y))\n",
        "Y = np.concatenate([np.ones((240)), -np.ones((240))])"
      ],
      "execution_count": 38,
      "outputs": []
    },
    {
      "cell_type": "code",
      "source": [
        "seconds = time.time()\n",
        "print(\"Time in seconds since beginning of run:\", seconds)\n",
        "local_time = time.ctime(seconds)\n",
        "print(local_time)"
      ],
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 0
        },
        "id": "19TWP-1eKURB",
        "outputId": "fc9c8922-9259-4c93-e422-f4afae87d032"
      },
      "execution_count": 39,
      "outputs": [
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "Time in seconds since beginning of run: 1712720601.9752722\n",
            "Wed Apr 10 03:43:21 2024\n"
          ]
        }
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "crc0q1vbIyTj",
        "outputId": "14ea2c42-4528-487f-b8ff-841da673f960",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 0
        }
      },
      "source": [
        "tn_model.compile(optimizer=\"adam\", loss=\"mean_squared_error\")\n",
        "tn_model.fit(X, Y, epochs=300, verbose=2)"
      ],
      "execution_count": 40,
      "outputs": [
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "Epoch 1/300\n",
            "15/15 - 1s - loss: 0.6719 - 1s/epoch - 92ms/step\n",
            "Epoch 2/300\n",
            "15/15 - 0s - loss: 0.1154 - 298ms/epoch - 20ms/step\n",
            "Epoch 3/300\n",
            "15/15 - 0s - loss: 0.0370 - 292ms/epoch - 19ms/step\n",
            "Epoch 4/300\n",
            "15/15 - 0s - loss: 0.0310 - 294ms/epoch - 20ms/step\n",
            "Epoch 5/300\n",
            "15/15 - 0s - loss: 0.0212 - 287ms/epoch - 19ms/step\n",
            "Epoch 6/300\n",
            "15/15 - 0s - loss: 0.0126 - 296ms/epoch - 20ms/step\n",
            "Epoch 7/300\n",
            "15/15 - 0s - loss: 0.0132 - 295ms/epoch - 20ms/step\n",
            "Epoch 8/300\n",
            "15/15 - 0s - loss: 0.0148 - 285ms/epoch - 19ms/step\n",
            "Epoch 9/300\n",
            "15/15 - 0s - loss: 0.0144 - 288ms/epoch - 19ms/step\n",
            "Epoch 10/300\n",
            "15/15 - 0s - loss: 0.0281 - 289ms/epoch - 19ms/step\n",
            "Epoch 11/300\n",
            "15/15 - 0s - loss: 0.0437 - 289ms/epoch - 19ms/step\n",
            "Epoch 12/300\n",
            "15/15 - 0s - loss: 0.0271 - 280ms/epoch - 19ms/step\n",
            "Epoch 13/300\n",
            "15/15 - 0s - loss: 0.0155 - 287ms/epoch - 19ms/step\n",
            "Epoch 14/300\n",
            "15/15 - 0s - loss: 0.0104 - 285ms/epoch - 19ms/step\n",
            "Epoch 15/300\n",
            "15/15 - 0s - loss: 0.0211 - 281ms/epoch - 19ms/step\n",
            "Epoch 16/300\n",
            "15/15 - 0s - loss: 0.0377 - 281ms/epoch - 19ms/step\n",
            "Epoch 17/300\n",
            "15/15 - 0s - loss: 0.0355 - 286ms/epoch - 19ms/step\n",
            "Epoch 18/300\n",
            "15/15 - 0s - loss: 0.0122 - 286ms/epoch - 19ms/step\n",
            "Epoch 19/300\n",
            "15/15 - 0s - loss: 0.0092 - 286ms/epoch - 19ms/step\n",
            "Epoch 20/300\n",
            "15/15 - 0s - loss: 0.0048 - 283ms/epoch - 19ms/step\n",
            "Epoch 21/300\n",
            "15/15 - 0s - loss: 0.0074 - 280ms/epoch - 19ms/step\n",
            "Epoch 22/300\n",
            "15/15 - 0s - loss: 0.0148 - 277ms/epoch - 18ms/step\n",
            "Epoch 23/300\n",
            "15/15 - 0s - loss: 0.0075 - 280ms/epoch - 19ms/step\n",
            "Epoch 24/300\n",
            "15/15 - 0s - loss: 0.0199 - 279ms/epoch - 19ms/step\n",
            "Epoch 25/300\n",
            "15/15 - 0s - loss: 0.0186 - 285ms/epoch - 19ms/step\n",
            "Epoch 26/300\n",
            "15/15 - 0s - loss: 0.0044 - 281ms/epoch - 19ms/step\n",
            "Epoch 27/300\n",
            "15/15 - 0s - loss: 0.0084 - 288ms/epoch - 19ms/step\n",
            "Epoch 28/300\n",
            "15/15 - 0s - loss: 0.0015 - 293ms/epoch - 20ms/step\n",
            "Epoch 29/300\n",
            "15/15 - 0s - loss: 0.0012 - 295ms/epoch - 20ms/step\n",
            "Epoch 30/300\n",
            "15/15 - 0s - loss: 0.0251 - 289ms/epoch - 19ms/step\n",
            "Epoch 31/300\n",
            "15/15 - 0s - loss: 0.0228 - 285ms/epoch - 19ms/step\n",
            "Epoch 32/300\n",
            "15/15 - 0s - loss: 0.0431 - 299ms/epoch - 20ms/step\n",
            "Epoch 33/300\n",
            "15/15 - 0s - loss: 0.0114 - 289ms/epoch - 19ms/step\n",
            "Epoch 34/300\n",
            "15/15 - 0s - loss: 0.0212 - 288ms/epoch - 19ms/step\n",
            "Epoch 35/300\n",
            "15/15 - 0s - loss: 0.0239 - 286ms/epoch - 19ms/step\n",
            "Epoch 36/300\n",
            "15/15 - 0s - loss: 0.0214 - 292ms/epoch - 19ms/step\n",
            "Epoch 37/300\n",
            "15/15 - 0s - loss: 0.0036 - 285ms/epoch - 19ms/step\n",
            "Epoch 38/300\n",
            "15/15 - 0s - loss: 0.0098 - 282ms/epoch - 19ms/step\n",
            "Epoch 39/300\n",
            "15/15 - 0s - loss: 0.0102 - 288ms/epoch - 19ms/step\n",
            "Epoch 40/300\n",
            "15/15 - 0s - loss: 0.0032 - 296ms/epoch - 20ms/step\n",
            "Epoch 41/300\n",
            "15/15 - 0s - loss: 0.0079 - 293ms/epoch - 20ms/step\n",
            "Epoch 42/300\n",
            "15/15 - 0s - loss: 0.0077 - 288ms/epoch - 19ms/step\n",
            "Epoch 43/300\n",
            "15/15 - 0s - loss: 0.0041 - 285ms/epoch - 19ms/step\n",
            "Epoch 44/300\n",
            "15/15 - 0s - loss: 0.0065 - 291ms/epoch - 19ms/step\n",
            "Epoch 45/300\n",
            "15/15 - 0s - loss: 8.6395e-04 - 294ms/epoch - 20ms/step\n",
            "Epoch 46/300\n",
            "15/15 - 0s - loss: 0.0056 - 286ms/epoch - 19ms/step\n",
            "Epoch 47/300\n",
            "15/15 - 0s - loss: 0.0193 - 300ms/epoch - 20ms/step\n",
            "Epoch 48/300\n",
            "15/15 - 0s - loss: 0.0115 - 287ms/epoch - 19ms/step\n",
            "Epoch 49/300\n",
            "15/15 - 0s - loss: 0.0146 - 291ms/epoch - 19ms/step\n",
            "Epoch 50/300\n",
            "15/15 - 0s - loss: 0.0154 - 280ms/epoch - 19ms/step\n",
            "Epoch 51/300\n",
            "15/15 - 0s - loss: 0.0159 - 284ms/epoch - 19ms/step\n",
            "Epoch 52/300\n",
            "15/15 - 0s - loss: 0.0086 - 287ms/epoch - 19ms/step\n",
            "Epoch 53/300\n",
            "15/15 - 0s - loss: 0.0030 - 276ms/epoch - 18ms/step\n",
            "Epoch 54/300\n",
            "15/15 - 0s - loss: 0.0023 - 280ms/epoch - 19ms/step\n",
            "Epoch 55/300\n",
            "15/15 - 0s - loss: 0.0110 - 287ms/epoch - 19ms/step\n",
            "Epoch 56/300\n",
            "15/15 - 0s - loss: 0.0117 - 281ms/epoch - 19ms/step\n",
            "Epoch 57/300\n",
            "15/15 - 0s - loss: 0.0233 - 285ms/epoch - 19ms/step\n",
            "Epoch 58/300\n",
            "15/15 - 0s - loss: 0.0216 - 281ms/epoch - 19ms/step\n",
            "Epoch 59/300\n",
            "15/15 - 0s - loss: 0.0171 - 283ms/epoch - 19ms/step\n",
            "Epoch 60/300\n",
            "15/15 - 0s - loss: 0.0112 - 286ms/epoch - 19ms/step\n",
            "Epoch 61/300\n",
            "15/15 - 0s - loss: 0.0193 - 280ms/epoch - 19ms/step\n",
            "Epoch 62/300\n",
            "15/15 - 0s - loss: 0.0232 - 290ms/epoch - 19ms/step\n",
            "Epoch 63/300\n",
            "15/15 - 0s - loss: 0.0257 - 286ms/epoch - 19ms/step\n",
            "Epoch 64/300\n",
            "15/15 - 0s - loss: 0.0193 - 296ms/epoch - 20ms/step\n",
            "Epoch 65/300\n",
            "15/15 - 0s - loss: 0.0138 - 288ms/epoch - 19ms/step\n",
            "Epoch 66/300\n",
            "15/15 - 0s - loss: 0.0200 - 280ms/epoch - 19ms/step\n",
            "Epoch 67/300\n",
            "15/15 - 0s - loss: 0.0150 - 288ms/epoch - 19ms/step\n",
            "Epoch 68/300\n",
            "15/15 - 0s - loss: 0.0339 - 281ms/epoch - 19ms/step\n",
            "Epoch 69/300\n",
            "15/15 - 0s - loss: 0.0039 - 282ms/epoch - 19ms/step\n",
            "Epoch 70/300\n",
            "15/15 - 0s - loss: 0.0170 - 277ms/epoch - 18ms/step\n",
            "Epoch 71/300\n",
            "15/15 - 0s - loss: 0.0073 - 280ms/epoch - 19ms/step\n",
            "Epoch 72/300\n",
            "15/15 - 0s - loss: 0.0188 - 277ms/epoch - 18ms/step\n",
            "Epoch 73/300\n",
            "15/15 - 0s - loss: 0.0180 - 279ms/epoch - 19ms/step\n",
            "Epoch 74/300\n",
            "15/15 - 0s - loss: 0.0363 - 279ms/epoch - 19ms/step\n",
            "Epoch 75/300\n",
            "15/15 - 0s - loss: 0.0245 - 287ms/epoch - 19ms/step\n",
            "Epoch 76/300\n",
            "15/15 - 0s - loss: 0.0023 - 280ms/epoch - 19ms/step\n",
            "Epoch 77/300\n",
            "15/15 - 0s - loss: 0.0053 - 283ms/epoch - 19ms/step\n",
            "Epoch 78/300\n",
            "15/15 - 0s - loss: 0.0072 - 290ms/epoch - 19ms/step\n",
            "Epoch 79/300\n",
            "15/15 - 0s - loss: 0.0040 - 290ms/epoch - 19ms/step\n",
            "Epoch 80/300\n",
            "15/15 - 0s - loss: 0.0063 - 284ms/epoch - 19ms/step\n",
            "Epoch 81/300\n",
            "15/15 - 0s - loss: 0.0063 - 285ms/epoch - 19ms/step\n",
            "Epoch 82/300\n",
            "15/15 - 0s - loss: 0.0069 - 287ms/epoch - 19ms/step\n",
            "Epoch 83/300\n",
            "15/15 - 0s - loss: 0.0043 - 290ms/epoch - 19ms/step\n",
            "Epoch 84/300\n",
            "15/15 - 0s - loss: 0.0036 - 279ms/epoch - 19ms/step\n",
            "Epoch 85/300\n",
            "15/15 - 0s - loss: 0.0019 - 283ms/epoch - 19ms/step\n",
            "Epoch 86/300\n",
            "15/15 - 0s - loss: 0.0012 - 284ms/epoch - 19ms/step\n",
            "Epoch 87/300\n",
            "15/15 - 0s - loss: 4.4933e-04 - 281ms/epoch - 19ms/step\n",
            "Epoch 88/300\n",
            "15/15 - 0s - loss: 3.0690e-04 - 281ms/epoch - 19ms/step\n",
            "Epoch 89/300\n",
            "15/15 - 0s - loss: 2.3679e-04 - 289ms/epoch - 19ms/step\n",
            "Epoch 90/300\n",
            "15/15 - 0s - loss: 1.5673e-04 - 278ms/epoch - 19ms/step\n",
            "Epoch 91/300\n",
            "15/15 - 0s - loss: 1.0431e-04 - 285ms/epoch - 19ms/step\n",
            "Epoch 92/300\n",
            "15/15 - 0s - loss: 8.1645e-05 - 281ms/epoch - 19ms/step\n",
            "Epoch 93/300\n",
            "15/15 - 0s - loss: 5.9530e-05 - 280ms/epoch - 19ms/step\n",
            "Epoch 94/300\n",
            "15/15 - 0s - loss: 3.5990e-05 - 290ms/epoch - 19ms/step\n",
            "Epoch 95/300\n",
            "15/15 - 0s - loss: 3.1083e-05 - 284ms/epoch - 19ms/step\n",
            "Epoch 96/300\n",
            "15/15 - 0s - loss: 3.0722e-05 - 292ms/epoch - 19ms/step\n",
            "Epoch 97/300\n",
            "15/15 - 0s - loss: 2.7379e-05 - 291ms/epoch - 19ms/step\n",
            "Epoch 98/300\n",
            "15/15 - 0s - loss: 2.2156e-05 - 290ms/epoch - 19ms/step\n",
            "Epoch 99/300\n",
            "15/15 - 0s - loss: 2.1175e-05 - 289ms/epoch - 19ms/step\n",
            "Epoch 100/300\n",
            "15/15 - 0s - loss: 1.9635e-05 - 287ms/epoch - 19ms/step\n",
            "Epoch 101/300\n",
            "15/15 - 0s - loss: 1.5780e-05 - 288ms/epoch - 19ms/step\n",
            "Epoch 102/300\n",
            "15/15 - 0s - loss: 1.6497e-05 - 298ms/epoch - 20ms/step\n",
            "Epoch 103/300\n",
            "15/15 - 0s - loss: 1.3306e-05 - 287ms/epoch - 19ms/step\n",
            "Epoch 104/300\n",
            "15/15 - 0s - loss: 1.4588e-05 - 289ms/epoch - 19ms/step\n",
            "Epoch 105/300\n",
            "15/15 - 0s - loss: 1.4911e-05 - 287ms/epoch - 19ms/step\n",
            "Epoch 106/300\n",
            "15/15 - 0s - loss: 1.3039e-05 - 285ms/epoch - 19ms/step\n",
            "Epoch 107/300\n",
            "15/15 - 0s - loss: 1.1496e-05 - 283ms/epoch - 19ms/step\n",
            "Epoch 108/300\n",
            "15/15 - 0s - loss: 9.9170e-06 - 287ms/epoch - 19ms/step\n",
            "Epoch 109/300\n",
            "15/15 - 0s - loss: 1.0718e-05 - 291ms/epoch - 19ms/step\n",
            "Epoch 110/300\n",
            "15/15 - 0s - loss: 9.2539e-06 - 287ms/epoch - 19ms/step\n",
            "Epoch 111/300\n",
            "15/15 - 0s - loss: 8.6738e-06 - 295ms/epoch - 20ms/step\n",
            "Epoch 112/300\n",
            "15/15 - 0s - loss: 1.0988e-05 - 290ms/epoch - 19ms/step\n",
            "Epoch 113/300\n",
            "15/15 - 0s - loss: 1.3679e-05 - 295ms/epoch - 20ms/step\n",
            "Epoch 114/300\n",
            "15/15 - 0s - loss: 8.5598e-06 - 293ms/epoch - 20ms/step\n",
            "Epoch 115/300\n",
            "15/15 - 0s - loss: 7.4881e-06 - 293ms/epoch - 20ms/step\n",
            "Epoch 116/300\n",
            "15/15 - 0s - loss: 7.1323e-06 - 294ms/epoch - 20ms/step\n",
            "Epoch 117/300\n",
            "15/15 - 0s - loss: 6.9512e-06 - 291ms/epoch - 19ms/step\n",
            "Epoch 118/300\n",
            "15/15 - 0s - loss: 6.4960e-06 - 288ms/epoch - 19ms/step\n",
            "Epoch 119/300\n",
            "15/15 - 0s - loss: 6.4539e-06 - 283ms/epoch - 19ms/step\n",
            "Epoch 120/300\n",
            "15/15 - 0s - loss: 6.2211e-06 - 284ms/epoch - 19ms/step\n",
            "Epoch 121/300\n",
            "15/15 - 0s - loss: 5.8882e-06 - 282ms/epoch - 19ms/step\n",
            "Epoch 122/300\n",
            "15/15 - 0s - loss: 5.7120e-06 - 285ms/epoch - 19ms/step\n",
            "Epoch 123/300\n",
            "15/15 - 0s - loss: 6.4391e-06 - 283ms/epoch - 19ms/step\n",
            "Epoch 124/300\n",
            "15/15 - 0s - loss: 5.4390e-06 - 287ms/epoch - 19ms/step\n",
            "Epoch 125/300\n",
            "15/15 - 0s - loss: 6.2832e-06 - 292ms/epoch - 19ms/step\n",
            "Epoch 126/300\n",
            "15/15 - 0s - loss: 6.3061e-06 - 289ms/epoch - 19ms/step\n",
            "Epoch 127/300\n",
            "15/15 - 0s - loss: 5.8754e-06 - 292ms/epoch - 19ms/step\n",
            "Epoch 128/300\n",
            "15/15 - 0s - loss: 9.7488e-06 - 290ms/epoch - 19ms/step\n",
            "Epoch 129/300\n",
            "15/15 - 0s - loss: 7.0809e-06 - 280ms/epoch - 19ms/step\n",
            "Epoch 130/300\n",
            "15/15 - 0s - loss: 7.1473e-06 - 280ms/epoch - 19ms/step\n",
            "Epoch 131/300\n",
            "15/15 - 0s - loss: 9.6436e-06 - 282ms/epoch - 19ms/step\n",
            "Epoch 132/300\n",
            "15/15 - 0s - loss: 5.6727e-06 - 279ms/epoch - 19ms/step\n",
            "Epoch 133/300\n",
            "15/15 - 0s - loss: 4.1787e-06 - 278ms/epoch - 19ms/step\n",
            "Epoch 134/300\n",
            "15/15 - 0s - loss: 3.9343e-06 - 276ms/epoch - 18ms/step\n",
            "Epoch 135/300\n",
            "15/15 - 0s - loss: 3.5229e-06 - 284ms/epoch - 19ms/step\n",
            "Epoch 136/300\n",
            "15/15 - 0s - loss: 3.9962e-06 - 280ms/epoch - 19ms/step\n",
            "Epoch 137/300\n",
            "15/15 - 0s - loss: 4.5448e-06 - 285ms/epoch - 19ms/step\n",
            "Epoch 138/300\n",
            "15/15 - 0s - loss: 3.5799e-06 - 289ms/epoch - 19ms/step\n",
            "Epoch 139/300\n",
            "15/15 - 0s - loss: 4.6795e-06 - 281ms/epoch - 19ms/step\n",
            "Epoch 140/300\n",
            "15/15 - 0s - loss: 8.6549e-06 - 283ms/epoch - 19ms/step\n",
            "Epoch 141/300\n",
            "15/15 - 0s - loss: 7.2627e-06 - 283ms/epoch - 19ms/step\n",
            "Epoch 142/300\n",
            "15/15 - 0s - loss: 3.7474e-06 - 286ms/epoch - 19ms/step\n",
            "Epoch 143/300\n",
            "15/15 - 0s - loss: 3.6802e-06 - 283ms/epoch - 19ms/step\n",
            "Epoch 144/300\n",
            "15/15 - 0s - loss: 4.2591e-06 - 280ms/epoch - 19ms/step\n",
            "Epoch 145/300\n",
            "15/15 - 0s - loss: 5.0712e-06 - 277ms/epoch - 18ms/step\n",
            "Epoch 146/300\n",
            "15/15 - 0s - loss: 3.5302e-06 - 284ms/epoch - 19ms/step\n",
            "Epoch 147/300\n",
            "15/15 - 0s - loss: 3.8500e-06 - 280ms/epoch - 19ms/step\n",
            "Epoch 148/300\n",
            "15/15 - 0s - loss: 2.8857e-06 - 279ms/epoch - 19ms/step\n",
            "Epoch 149/300\n",
            "15/15 - 0s - loss: 2.8359e-06 - 288ms/epoch - 19ms/step\n",
            "Epoch 150/300\n",
            "15/15 - 0s - loss: 2.6365e-06 - 287ms/epoch - 19ms/step\n",
            "Epoch 151/300\n",
            "15/15 - 0s - loss: 2.9228e-06 - 290ms/epoch - 19ms/step\n",
            "Epoch 152/300\n",
            "15/15 - 0s - loss: 3.0872e-06 - 297ms/epoch - 20ms/step\n",
            "Epoch 153/300\n",
            "15/15 - 0s - loss: 2.5038e-06 - 281ms/epoch - 19ms/step\n",
            "Epoch 154/300\n",
            "15/15 - 0s - loss: 3.2244e-06 - 289ms/epoch - 19ms/step\n",
            "Epoch 155/300\n",
            "15/15 - 0s - loss: 3.1678e-06 - 285ms/epoch - 19ms/step\n",
            "Epoch 156/300\n",
            "15/15 - 0s - loss: 3.1936e-06 - 290ms/epoch - 19ms/step\n",
            "Epoch 157/300\n",
            "15/15 - 0s - loss: 3.1554e-06 - 284ms/epoch - 19ms/step\n",
            "Epoch 158/300\n",
            "15/15 - 0s - loss: 3.7706e-06 - 282ms/epoch - 19ms/step\n",
            "Epoch 159/300\n",
            "15/15 - 0s - loss: 6.2621e-06 - 282ms/epoch - 19ms/step\n",
            "Epoch 160/300\n",
            "15/15 - 0s - loss: 4.3097e-06 - 284ms/epoch - 19ms/step\n",
            "Epoch 161/300\n",
            "15/15 - 0s - loss: 2.4491e-06 - 282ms/epoch - 19ms/step\n",
            "Epoch 162/300\n",
            "15/15 - 0s - loss: 2.1196e-06 - 289ms/epoch - 19ms/step\n",
            "Epoch 163/300\n",
            "15/15 - 0s - loss: 3.4628e-06 - 279ms/epoch - 19ms/step\n",
            "Epoch 164/300\n",
            "15/15 - 0s - loss: 2.8400e-06 - 283ms/epoch - 19ms/step\n",
            "Epoch 165/300\n",
            "15/15 - 0s - loss: 2.4683e-06 - 287ms/epoch - 19ms/step\n",
            "Epoch 166/300\n",
            "15/15 - 0s - loss: 2.4893e-06 - 281ms/epoch - 19ms/step\n",
            "Epoch 167/300\n",
            "15/15 - 0s - loss: 2.0700e-06 - 289ms/epoch - 19ms/step\n",
            "Epoch 168/300\n",
            "15/15 - 0s - loss: 1.5730e-06 - 282ms/epoch - 19ms/step\n",
            "Epoch 169/300\n",
            "15/15 - 0s - loss: 2.3878e-06 - 290ms/epoch - 19ms/step\n",
            "Epoch 170/300\n",
            "15/15 - 0s - loss: 3.6620e-06 - 293ms/epoch - 20ms/step\n",
            "Epoch 171/300\n",
            "15/15 - 0s - loss: 1.0939e-05 - 277ms/epoch - 18ms/step\n",
            "Epoch 172/300\n",
            "15/15 - 0s - loss: 1.6225e-05 - 283ms/epoch - 19ms/step\n",
            "Epoch 173/300\n",
            "15/15 - 0s - loss: 2.1101e-05 - 289ms/epoch - 19ms/step\n",
            "Epoch 174/300\n",
            "15/15 - 0s - loss: 2.1635e-05 - 283ms/epoch - 19ms/step\n",
            "Epoch 175/300\n",
            "15/15 - 0s - loss: 1.0928e-05 - 285ms/epoch - 19ms/step\n",
            "Epoch 176/300\n",
            "15/15 - 0s - loss: 8.7914e-06 - 291ms/epoch - 19ms/step\n",
            "Epoch 177/300\n",
            "15/15 - 0s - loss: 8.0469e-06 - 282ms/epoch - 19ms/step\n",
            "Epoch 178/300\n",
            "15/15 - 0s - loss: 4.9479e-06 - 290ms/epoch - 19ms/step\n",
            "Epoch 179/300\n",
            "15/15 - 0s - loss: 4.0625e-06 - 283ms/epoch - 19ms/step\n",
            "Epoch 180/300\n",
            "15/15 - 0s - loss: 3.2190e-06 - 293ms/epoch - 20ms/step\n",
            "Epoch 181/300\n",
            "15/15 - 0s - loss: 3.1380e-06 - 289ms/epoch - 19ms/step\n",
            "Epoch 182/300\n",
            "15/15 - 0s - loss: 2.4909e-06 - 293ms/epoch - 20ms/step\n",
            "Epoch 183/300\n",
            "15/15 - 0s - loss: 2.7136e-06 - 284ms/epoch - 19ms/step\n",
            "Epoch 184/300\n",
            "15/15 - 0s - loss: 1.9741e-06 - 301ms/epoch - 20ms/step\n",
            "Epoch 185/300\n",
            "15/15 - 0s - loss: 1.6418e-06 - 290ms/epoch - 19ms/step\n",
            "Epoch 186/300\n",
            "15/15 - 0s - loss: 2.7957e-06 - 288ms/epoch - 19ms/step\n",
            "Epoch 187/300\n",
            "15/15 - 0s - loss: 2.2476e-06 - 287ms/epoch - 19ms/step\n",
            "Epoch 188/300\n",
            "15/15 - 0s - loss: 1.8557e-06 - 290ms/epoch - 19ms/step\n",
            "Epoch 189/300\n",
            "15/15 - 0s - loss: 1.6151e-06 - 288ms/epoch - 19ms/step\n",
            "Epoch 190/300\n",
            "15/15 - 0s - loss: 1.9777e-06 - 287ms/epoch - 19ms/step\n",
            "Epoch 191/300\n",
            "15/15 - 0s - loss: 1.4492e-06 - 281ms/epoch - 19ms/step\n",
            "Epoch 192/300\n",
            "15/15 - 0s - loss: 2.0115e-06 - 286ms/epoch - 19ms/step\n",
            "Epoch 193/300\n",
            "15/15 - 0s - loss: 2.3729e-06 - 289ms/epoch - 19ms/step\n",
            "Epoch 194/300\n",
            "15/15 - 0s - loss: 1.5837e-06 - 283ms/epoch - 19ms/step\n",
            "Epoch 195/300\n",
            "15/15 - 0s - loss: 9.6278e-07 - 286ms/epoch - 19ms/step\n",
            "Epoch 196/300\n",
            "15/15 - 0s - loss: 1.3808e-06 - 297ms/epoch - 20ms/step\n",
            "Epoch 197/300\n",
            "15/15 - 0s - loss: 1.1241e-06 - 295ms/epoch - 20ms/step\n",
            "Epoch 198/300\n",
            "15/15 - 0s - loss: 1.0823e-06 - 290ms/epoch - 19ms/step\n",
            "Epoch 199/300\n",
            "15/15 - 0s - loss: 1.1017e-06 - 300ms/epoch - 20ms/step\n",
            "Epoch 200/300\n",
            "15/15 - 0s - loss: 9.5030e-07 - 295ms/epoch - 20ms/step\n",
            "Epoch 201/300\n",
            "15/15 - 0s - loss: 9.1188e-07 - 292ms/epoch - 19ms/step\n",
            "Epoch 202/300\n",
            "15/15 - 0s - loss: 2.3651e-06 - 293ms/epoch - 20ms/step\n",
            "Epoch 203/300\n",
            "15/15 - 0s - loss: 2.3242e-06 - 299ms/epoch - 20ms/step\n",
            "Epoch 204/300\n",
            "15/15 - 0s - loss: 1.9507e-06 - 296ms/epoch - 20ms/step\n",
            "Epoch 205/300\n",
            "15/15 - 0s - loss: 2.1409e-06 - 293ms/epoch - 20ms/step\n",
            "Epoch 206/300\n",
            "15/15 - 0s - loss: 1.3593e-06 - 292ms/epoch - 19ms/step\n",
            "Epoch 207/300\n",
            "15/15 - 0s - loss: 7.0486e-07 - 296ms/epoch - 20ms/step\n",
            "Epoch 208/300\n",
            "15/15 - 0s - loss: 1.2180e-06 - 291ms/epoch - 19ms/step\n",
            "Epoch 209/300\n",
            "15/15 - 0s - loss: 1.4451e-06 - 287ms/epoch - 19ms/step\n",
            "Epoch 210/300\n",
            "15/15 - 0s - loss: 1.3376e-06 - 297ms/epoch - 20ms/step\n",
            "Epoch 211/300\n",
            "15/15 - 0s - loss: 3.1961e-06 - 298ms/epoch - 20ms/step\n",
            "Epoch 212/300\n",
            "15/15 - 0s - loss: 2.5461e-06 - 289ms/epoch - 19ms/step\n",
            "Epoch 213/300\n",
            "15/15 - 0s - loss: 1.6857e-06 - 293ms/epoch - 20ms/step\n",
            "Epoch 214/300\n",
            "15/15 - 0s - loss: 1.3736e-06 - 286ms/epoch - 19ms/step\n",
            "Epoch 215/300\n",
            "15/15 - 0s - loss: 1.9370e-06 - 285ms/epoch - 19ms/step\n",
            "Epoch 216/300\n",
            "15/15 - 0s - loss: 1.7095e-06 - 293ms/epoch - 20ms/step\n",
            "Epoch 217/300\n",
            "15/15 - 0s - loss: 1.2586e-06 - 288ms/epoch - 19ms/step\n",
            "Epoch 218/300\n",
            "15/15 - 0s - loss: 6.2604e-07 - 284ms/epoch - 19ms/step\n",
            "Epoch 219/300\n",
            "15/15 - 0s - loss: 5.9326e-07 - 293ms/epoch - 20ms/step\n",
            "Epoch 220/300\n",
            "15/15 - 0s - loss: 5.6618e-07 - 292ms/epoch - 19ms/step\n",
            "Epoch 221/300\n",
            "15/15 - 0s - loss: 5.8062e-07 - 293ms/epoch - 20ms/step\n",
            "Epoch 222/300\n",
            "15/15 - 0s - loss: 6.7327e-07 - 303ms/epoch - 20ms/step\n",
            "Epoch 223/300\n",
            "15/15 - 0s - loss: 1.2647e-06 - 284ms/epoch - 19ms/step\n",
            "Epoch 224/300\n",
            "15/15 - 0s - loss: 9.5362e-07 - 287ms/epoch - 19ms/step\n",
            "Epoch 225/300\n",
            "15/15 - 0s - loss: 7.0521e-07 - 290ms/epoch - 19ms/step\n",
            "Epoch 226/300\n",
            "15/15 - 0s - loss: 1.0024e-06 - 283ms/epoch - 19ms/step\n",
            "Epoch 227/300\n",
            "15/15 - 0s - loss: 1.2015e-06 - 299ms/epoch - 20ms/step\n",
            "Epoch 228/300\n",
            "15/15 - 0s - loss: 9.5801e-07 - 296ms/epoch - 20ms/step\n",
            "Epoch 229/300\n",
            "15/15 - 0s - loss: 9.5529e-07 - 292ms/epoch - 19ms/step\n",
            "Epoch 230/300\n",
            "15/15 - 0s - loss: 1.2078e-06 - 287ms/epoch - 19ms/step\n",
            "Epoch 231/300\n",
            "15/15 - 0s - loss: 2.5032e-06 - 291ms/epoch - 19ms/step\n",
            "Epoch 232/300\n",
            "15/15 - 0s - loss: 1.9102e-06 - 298ms/epoch - 20ms/step\n",
            "Epoch 233/300\n",
            "15/15 - 0s - loss: 7.5758e-07 - 294ms/epoch - 20ms/step\n",
            "Epoch 234/300\n",
            "15/15 - 0s - loss: 7.2783e-07 - 294ms/epoch - 20ms/step\n",
            "Epoch 235/300\n",
            "15/15 - 0s - loss: 5.2301e-07 - 287ms/epoch - 19ms/step\n",
            "Epoch 236/300\n",
            "15/15 - 0s - loss: 5.1560e-07 - 293ms/epoch - 20ms/step\n",
            "Epoch 237/300\n",
            "15/15 - 0s - loss: 5.7042e-07 - 288ms/epoch - 19ms/step\n",
            "Epoch 238/300\n",
            "15/15 - 0s - loss: 4.2797e-07 - 287ms/epoch - 19ms/step\n",
            "Epoch 239/300\n",
            "15/15 - 0s - loss: 4.3959e-07 - 284ms/epoch - 19ms/step\n",
            "Epoch 240/300\n",
            "15/15 - 0s - loss: 3.0464e-07 - 290ms/epoch - 19ms/step\n",
            "Epoch 241/300\n",
            "15/15 - 0s - loss: 4.8634e-07 - 286ms/epoch - 19ms/step\n",
            "Epoch 242/300\n",
            "15/15 - 0s - loss: 5.2933e-07 - 293ms/epoch - 20ms/step\n",
            "Epoch 243/300\n",
            "15/15 - 0s - loss: 1.1898e-06 - 287ms/epoch - 19ms/step\n",
            "Epoch 244/300\n",
            "15/15 - 0s - loss: 1.4027e-06 - 284ms/epoch - 19ms/step\n",
            "Epoch 245/300\n",
            "15/15 - 0s - loss: 5.6791e-07 - 284ms/epoch - 19ms/step\n",
            "Epoch 246/300\n",
            "15/15 - 0s - loss: 8.9223e-07 - 287ms/epoch - 19ms/step\n",
            "Epoch 247/300\n",
            "15/15 - 0s - loss: 1.1219e-06 - 285ms/epoch - 19ms/step\n",
            "Epoch 248/300\n",
            "15/15 - 0s - loss: 1.0178e-06 - 295ms/epoch - 20ms/step\n",
            "Epoch 249/300\n",
            "15/15 - 0s - loss: 3.6444e-06 - 292ms/epoch - 19ms/step\n",
            "Epoch 250/300\n",
            "15/15 - 0s - loss: 4.4571e-05 - 292ms/epoch - 19ms/step\n",
            "Epoch 251/300\n",
            "15/15 - 0s - loss: 3.2351e-04 - 290ms/epoch - 19ms/step\n",
            "Epoch 252/300\n",
            "15/15 - 0s - loss: 5.4521e-04 - 285ms/epoch - 19ms/step\n",
            "Epoch 253/300\n",
            "15/15 - 0s - loss: 2.4438e-04 - 282ms/epoch - 19ms/step\n",
            "Epoch 254/300\n",
            "15/15 - 0s - loss: 8.6598e-05 - 283ms/epoch - 19ms/step\n",
            "Epoch 255/300\n",
            "15/15 - 0s - loss: 3.9127e-05 - 286ms/epoch - 19ms/step\n",
            "Epoch 256/300\n",
            "15/15 - 0s - loss: 2.4145e-05 - 284ms/epoch - 19ms/step\n",
            "Epoch 257/300\n",
            "15/15 - 0s - loss: 1.6433e-05 - 286ms/epoch - 19ms/step\n",
            "Epoch 258/300\n",
            "15/15 - 0s - loss: 6.4260e-06 - 289ms/epoch - 19ms/step\n",
            "Epoch 259/300\n",
            "15/15 - 0s - loss: 2.8772e-06 - 283ms/epoch - 19ms/step\n",
            "Epoch 260/300\n",
            "15/15 - 0s - loss: 4.0643e-06 - 289ms/epoch - 19ms/step\n",
            "Epoch 261/300\n",
            "15/15 - 0s - loss: 1.2270e-06 - 287ms/epoch - 19ms/step\n",
            "Epoch 262/300\n",
            "15/15 - 0s - loss: 1.0100e-06 - 293ms/epoch - 20ms/step\n",
            "Epoch 263/300\n",
            "15/15 - 0s - loss: 1.0032e-06 - 288ms/epoch - 19ms/step\n",
            "Epoch 264/300\n",
            "15/15 - 0s - loss: 1.5339e-06 - 286ms/epoch - 19ms/step\n",
            "Epoch 265/300\n",
            "15/15 - 0s - loss: 1.9484e-06 - 292ms/epoch - 19ms/step\n",
            "Epoch 266/300\n",
            "15/15 - 0s - loss: 1.9033e-06 - 286ms/epoch - 19ms/step\n",
            "Epoch 267/300\n",
            "15/15 - 0s - loss: 1.6062e-06 - 292ms/epoch - 19ms/step\n",
            "Epoch 268/300\n",
            "15/15 - 0s - loss: 6.5237e-07 - 296ms/epoch - 20ms/step\n",
            "Epoch 269/300\n",
            "15/15 - 0s - loss: 6.3047e-07 - 293ms/epoch - 20ms/step\n",
            "Epoch 270/300\n",
            "15/15 - 0s - loss: 1.5313e-06 - 298ms/epoch - 20ms/step\n",
            "Epoch 271/300\n",
            "15/15 - 0s - loss: 1.4242e-06 - 294ms/epoch - 20ms/step\n",
            "Epoch 272/300\n",
            "15/15 - 0s - loss: 9.7579e-07 - 287ms/epoch - 19ms/step\n",
            "Epoch 273/300\n",
            "15/15 - 0s - loss: 5.7198e-07 - 290ms/epoch - 19ms/step\n",
            "Epoch 274/300\n",
            "15/15 - 0s - loss: 6.4648e-07 - 288ms/epoch - 19ms/step\n",
            "Epoch 275/300\n",
            "15/15 - 0s - loss: 1.3823e-06 - 286ms/epoch - 19ms/step\n",
            "Epoch 276/300\n",
            "15/15 - 0s - loss: 2.1212e-06 - 295ms/epoch - 20ms/step\n",
            "Epoch 277/300\n",
            "15/15 - 0s - loss: 6.6313e-07 - 281ms/epoch - 19ms/step\n",
            "Epoch 278/300\n",
            "15/15 - 0s - loss: 4.4596e-07 - 281ms/epoch - 19ms/step\n",
            "Epoch 279/300\n",
            "15/15 - 0s - loss: 1.3609e-06 - 282ms/epoch - 19ms/step\n",
            "Epoch 280/300\n",
            "15/15 - 0s - loss: 1.1406e-06 - 283ms/epoch - 19ms/step\n",
            "Epoch 281/300\n",
            "15/15 - 0s - loss: 1.0811e-06 - 280ms/epoch - 19ms/step\n",
            "Epoch 282/300\n",
            "15/15 - 0s - loss: 6.4863e-07 - 279ms/epoch - 19ms/step\n",
            "Epoch 283/300\n",
            "15/15 - 0s - loss: 1.2088e-06 - 282ms/epoch - 19ms/step\n",
            "Epoch 284/300\n",
            "15/15 - 0s - loss: 2.4985e-06 - 288ms/epoch - 19ms/step\n",
            "Epoch 285/300\n",
            "15/15 - 0s - loss: 1.7718e-06 - 285ms/epoch - 19ms/step\n",
            "Epoch 286/300\n",
            "15/15 - 0s - loss: 6.8107e-07 - 298ms/epoch - 20ms/step\n",
            "Epoch 287/300\n",
            "15/15 - 0s - loss: 3.9350e-07 - 284ms/epoch - 19ms/step\n",
            "Epoch 288/300\n",
            "15/15 - 0s - loss: 6.4950e-07 - 284ms/epoch - 19ms/step\n",
            "Epoch 289/300\n",
            "15/15 - 0s - loss: 5.1073e-07 - 282ms/epoch - 19ms/step\n",
            "Epoch 290/300\n",
            "15/15 - 0s - loss: 4.5362e-07 - 294ms/epoch - 20ms/step\n",
            "Epoch 291/300\n",
            "15/15 - 0s - loss: 4.1479e-07 - 287ms/epoch - 19ms/step\n",
            "Epoch 292/300\n",
            "15/15 - 0s - loss: 9.1585e-07 - 284ms/epoch - 19ms/step\n",
            "Epoch 293/300\n",
            "15/15 - 0s - loss: 2.2256e-06 - 291ms/epoch - 19ms/step\n",
            "Epoch 294/300\n",
            "15/15 - 0s - loss: 3.4192e-06 - 290ms/epoch - 19ms/step\n",
            "Epoch 295/300\n",
            "15/15 - 0s - loss: 6.5993e-07 - 281ms/epoch - 19ms/step\n",
            "Epoch 296/300\n",
            "15/15 - 0s - loss: 5.0123e-07 - 285ms/epoch - 19ms/step\n",
            "Epoch 297/300\n",
            "15/15 - 0s - loss: 8.2614e-07 - 288ms/epoch - 19ms/step\n",
            "Epoch 298/300\n",
            "15/15 - 0s - loss: 4.7091e-07 - 293ms/epoch - 20ms/step\n",
            "Epoch 299/300\n",
            "15/15 - 0s - loss: 1.5974e-06 - 292ms/epoch - 19ms/step\n",
            "Epoch 300/300\n",
            "15/15 - 0s - loss: 4.5801e-07 - 286ms/epoch - 19ms/step\n"
          ]
        },
        {
          "output_type": "execute_result",
          "data": {
            "text/plain": [
              "<keras.src.callbacks.History at 0x79515c3d9a20>"
            ]
          },
          "metadata": {},
          "execution_count": 40
        }
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "n-aNP4n3sqG_",
        "outputId": "36008ac3-575f-48c2-d22b-2716557799f3",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 443
        }
      },
      "source": [
        "# Plotting code, feel free to ignore.\n",
        "h = 1.0\n",
        "x_min, x_max = X[:, 0].min() - 5, X[:, 0].max() + 5\n",
        "y_min, y_max = X[:, 1].min() - 5, X[:, 1].max() + 5\n",
        "xx, yy = np.meshgrid(np.arange(x_min, x_max, h),\n",
        "                     np.arange(y_min, y_max, h))\n",
        "\n",
        "# here \"model\" is your model's prediction (classification) function\n",
        "Z = tn_model.predict(np.c_[xx.ravel(), yy.ravel()])\n",
        "\n",
        "# Put the result into a color plot\n",
        "Z = Z.reshape(xx.shape)\n",
        "plt.contourf(xx, yy, Z)\n",
        "plt.axis('off')\n",
        "\n",
        "# Plot also the training points\n",
        "plt.scatter(X[:, 0], X[:, 1], c=Y, cmap=plt.cm.Paired)"
      ],
      "execution_count": 41,
      "outputs": [
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "5/5 [==============================] - 0s 5ms/step\n"
          ]
        },
        {
          "output_type": "execute_result",
          "data": {
            "text/plain": [
              "<matplotlib.collections.PathCollection at 0x79503c7be8c0>"
            ]
          },
          "metadata": {},
          "execution_count": 41
        },
        {
          "output_type": "display_data",
          "data": {
            "text/plain": [
              "<Figure size 640x480 with 1 Axes>"
            ],
            "image/png": "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\n"
          },
          "metadata": {}
        }
      ]
    },
    {
      "cell_type": "code",
      "source": [
        "seconds = time.time()\n",
        "print(\"Time in seconds since end of run:\", seconds)\n",
        "local_time = time.ctime(seconds)\n",
        "print(local_time)"
      ],
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 0
        },
        "id": "s_ukr55OORqE",
        "outputId": "bb614b01-bf2a-4d99-ad95-4b8dd639c792"
      },
      "execution_count": 42,
      "outputs": [
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "Time in seconds since end of run: 1712720690.3507853\n",
            "Wed Apr 10 03:44:50 2024\n"
          ]
        }
      ]
    },
    {
      "cell_type": "code",
      "source": [
        "seconds = time.time()\n",
        "print(\"Time in seconds since beginning of run:\", seconds)\n",
        "local_time = time.ctime(seconds)\n",
        "print(local_time)"
      ],
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 0
        },
        "id": "o8HTyvcHchzQ",
        "outputId": "7b83ad63-b381-4157-dd8e-a263969667db"
      },
      "execution_count": 43,
      "outputs": [
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "Time in seconds since beginning of run: 1712720690.3581626\n",
            "Wed Apr 10 03:44:50 2024\n"
          ]
        }
      ]
    },
    {
      "cell_type": "code",
      "source": [
        "# Function to compute saliency map\n",
        "@tf.function\n",
        "def compute_saliency(input_image):\n",
        "    with tf.GradientTape() as tape:\n",
        "        tape.watch(input_image)\n",
        "        predictions = tn_model(input_image)\n",
        "    grads = tape.gradient(predictions, input_image)\n",
        "    saliency_map = tf.reduce_max(tf.abs(grads), axis=-1)\n",
        "    return saliency_map\n",
        "\n",
        "# Function to compute saliency map using Gradient\n",
        "@tf.function\n",
        "def compute_gradient_saliency(input_image):\n",
        "    with tf.GradientTape() as tape:\n",
        "        tape.watch(input_image)\n",
        "        predictions = tn_model(input_image)\n",
        "    grads = tape.gradient(predictions, input_image)\n",
        "    saliency_map = tf.reduce_max(tf.abs(grads), axis=-1)\n",
        "    return saliency_map\n",
        "\n",
        "# Compute saliency map for the entire grid\n",
        "def compute_saliency_map_grid():\n",
        "    xx, yy = np.meshgrid(np.arange(x_min, x_max, h), np.arange(y_min, y_max, h))\n",
        "    input_image = np.c_[xx.ravel(), yy.ravel()]\n",
        "    saliency_map = compute_saliency(tf.constant(input_image, dtype=tf.float32)).numpy()\n",
        "    saliency_map = saliency_map.reshape(xx.shape)\n",
        "    return xx, yy, saliency_map\n",
        "\n",
        "# Compute and plot saliency map for the entire grid\n",
        "xx, yy, saliency_map = compute_saliency_map_grid()\n",
        "\n",
        "# Compute saliency maps for all data points\n",
        "def compute_saliency_maps():\n",
        "    saliency_maps = []\n",
        "    for data_point in X:\n",
        "        saliency_map = compute_gradient_saliency(tf.constant(data_point[None, :], dtype=tf.float32)).numpy()\n",
        "        saliency_maps.append(saliency_map)\n",
        "    return saliency_maps\n",
        "\n",
        "# Find the indices of the data points with the highest saliency values\n",
        "def find_top_indices(saliency_maps, top_k):\n",
        "    top_indices = np.argsort(np.max(saliency_maps, axis=1))[-top_k:]\n",
        "    return top_indices\n",
        "\n",
        "def plot_most_diagnostic(top_indices, top_k, normalized_saliency_values):\n",
        "    plt.figure(figsize=(8, 6))\n",
        "    plt.scatter(X[:, 0], X[:, 1], c=Y, cmap=plt.cm.Paired)\n",
        "    plt.scatter(X[top_indices, 0], X[top_indices, 1], marker='o', s=200, facecolors='none', edgecolors='r', linewidths=2)\n",
        "    for i, index in enumerate(top_indices):\n",
        "        plt.annotate(f'{normalized_saliency_values.iloc[index][\"Saliency\"]:.4f}', (X[index, 0], X[index, 1]), xytext=(X[index, 0]+0.35, X[index, 1]+0.25), arrowprops=dict(facecolor='black', arrowstyle='->'))\n",
        "    plt.title(f'Saliency Most Diagnostic Data Points (Top {top_k})')\n",
        "    plt.xlabel('Feature 1')\n",
        "    plt.ylabel('Feature 2')\n",
        "    plt.grid(True)\n",
        "    plt.axis('equal')\n",
        "    plt.show()\n",
        "\n",
        "# Compute saliency maps for all data points\n",
        "saliency_maps = compute_saliency_maps()\n",
        "\n",
        "# Find the indices of the data points with the highest saliency values\n",
        "top_k = 5  # Number of top diagnostic data points to select\n",
        "top_indices = find_top_indices(saliency_maps, top_k)\n",
        "\n",
        "# Create a DataFrame to store the saliency values\n",
        "saliency_df = pd.DataFrame(data=saliency_maps, columns=[\"Saliency\"])\n",
        "\n",
        "# Save the saliency values to a CSV file\n",
        "saliency_df.to_csv(\"saliency_values.csv\", index=False)\n",
        "\n",
        "print(\"Saliency values saved to saliency_values.csv\")\n",
        "\n",
        "# Normalizing the saliency values\n",
        "normalized_saliency = (saliency_df - saliency_df.min()) / (saliency_df.max() - saliency_df.min())\n",
        "\n",
        "# Saving the normalized saliency values to a new CSV file\n",
        "normalized_saliency.to_csv(\"normalized_saliency_values.csv\", index=False)\n",
        "\n",
        "# Plot the most diagnostic data points\n",
        "plot_most_diagnostic(top_indices, top_k, normalized_saliency)\n",
        "\n",
        "print(\"Normalized saliency values saved to normalized_saliency_values.csv\")\n",
        "print(\"Normalized Saliency Top-k:\")\n",
        "print(normalized_saliency.nlargest(top_k, 'Saliency'))\n",
        "print(\"Normalized Saliency Max:\", normalized_saliency.max())\n",
        "print(\"Normalized Saliency Min:\", normalized_saliency.min())\n",
        "print(\"Normalized Saliency Mean:\", normalized_saliency.mean())\n",
        "print(\"Normalized Saliency Median:\", normalized_saliency.median())\n",
        "print(\"Normalized Saliency Mode:\", normalized_saliency.mode())\n",
        "sum_normalized_values = normalized_saliency.sum()\n",
        "print(\"Normalized Saliency Sum:\", sum_normalized_values)\n",
        "print(\"#\")\n",
        "print(\"#\")\n",
        "print(\"#\")\n",
        "print(\"Normalized Saliency Standard Deviation:\", normalized_saliency.std())\n",
        "print(\"Normalized Saliency Skewness:\", normalized_saliency.skew())\n",
        "print(\"Normalized Saliency Kurtosis:\", normalized_saliency.kurtosis())\n",
        "print(\"Normalized Saliency Variance:\", normalized_saliency.var())\n",
        "coefficient_variation = (normalized_saliency.std() / normalized_saliency.mean()) * 100\n",
        "print(\"Normalized Saliency Coefficient of Variation:\", coefficient_variation)\n",
        "print(\"#\")\n",
        "print(\"#\")\n",
        "print(\"#\")\n",
        "cumulative_sum = normalized_saliency.cumsum()\n",
        "print(\"Cumulative Sum of Normalized Saliency Values:\", cumulative_sum)\n",
        "mean_cumulative_sum = cumulative_sum / len(normalized_saliency)\n",
        "print(\"Mean of Cumulative Sum of Normalized Saliency Values:\", mean_cumulative_sum)\n",
        "rms = np.sqrt(np.mean(normalized_saliency**2))\n",
        "print(\"Normalized Saliency Root Mean Square:\", rms)\n",
        "q1 = normalized_saliency.quantile(0.25)\n",
        "q2 = normalized_saliency.quantile(0.75)\n",
        "iqr = q2 - q1\n",
        "print(\"Normalized Saliency 25th Percentile:\", q1)\n",
        "print(\"Normalized Saliency 75th Percentile:\", q2)\n",
        "print(\"Normalized Saliency Interquartile Range:\", iqr)"
      ],
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 1869
        },
        "id": "95xed6YyDClf",
        "outputId": "a1d30087-f832-4cbc-9d9b-7f3a310ac569"
      },
      "execution_count": 44,
      "outputs": [
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "Saliency values saved to saliency_values.csv\n"
          ]
        },
        {
          "output_type": "display_data",
          "data": {
            "text/plain": [
              "<Figure size 800x600 with 1 Axes>"
            ],
            "image/png": "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saJWq5X+/fu7OcqGKTMzUwGUGTNmePR+PPmc33fffYonvvYmTJig+Pr6Vthms9mUPn36KIBy6tQpl4914sQJZezYsQqgDBw4UNmyZUutYvH19VUmTJhQq32c6d69u3LLLbdUe/vmzZsVQHn//ffder+uqOq5r056erqi0WiUd99918NRicZOhlUIcR6Sk5Pp0qULQUFBlW6LiIio8Pv777/PJZdcQkREBHq9ns6dO7No0SKn91HdmOP9+/dz3XXXERISgsFgoE+fPixfvrxCmw8++ACVSsW6deuYOnUq4eHh+Pr6MmbMmCrH3v34448MHjwYf39/AgIC6Nu3L0uXLgVgxowZ6HS6Kve76667CAoKorS01Onjufnmm9m+fTv79+93bEtLS+OXX37h5ptvrnKfjIwMbr/9diIjIzEYDPTo0YMPP/ywUrvPPvuMxMRER/zdunXjlVdecTwX119/PQBDhw51XH4912EC48aN44477mDjxo2sWrXKsb2qMccvvvgiF1xwAaGhoXh7e5OYmMiXX35Z6ZglJSU88MADhIWF4e/vz1VXXcWpU6cqjUEtH3pw+PBhJk6cSFBQEIGBgUyaNAmj0VjhmFarlTlz5tC2bVv0ej1xcXE8+eSTlS73b9myhaSkJMLCwvD29iY+Pp7bbrsNKHsNhoeHAzBr1izHc1ceU3Vjjj/++GP69euHj48PwcHBXHzxxfz8888uP8f/Vt1z/scff3D99dfTunVr9Ho9MTExPPzww5SUlDjaTJw4kYULFwJUuPxeztVz5Cq1Wu3oYS8fxlPT69hkMjF37lw6dOjAsmXLGD16NH/++SeJiYkun2+VSkVxcTEffvhhpaENhYWFPPTQQ8TFxaHX64mIiGD48OH8/fffNT6OlJQUdu7cWaGn2FVffPEFiYmJeHt7ExYWxi233MKpU6cqtJk4cSJ+fn4cOXKEpKQkfH19iY6OZvbs2Si1WKPMZrNRUFBQY5uIiAi6d+/Ot99+W+vHIpoXSY6FOA+xsbFs3bqV3bt3O227aNEiYmNjefLJJ3nppZeIiYlh8uTJji/s2tizZw8DBgxg3759PPHEE7z00kv4+voyevRovv7660rt77//fnbs2MGMGTO49957+e677yqN6/3ggw+4/PLLycnJYdq0aTz33HP07NmTlStXAnDrrbditVpZtmxZhf3MZjNf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f19hkmVVr+PzUdN5atGiBZMnT2by5MlkZGTQu3dvnnnmGUaNGlXtPuWLaaSkpNC9e3eXYih/LAcOHKh0RejAgQOVHqvdbufIkSOO3mKAgwcPApzTapPlw83KK6ycLSUlhbCwsCpvE6Kc9BwLcR5+/fXXKnttysd6ll9WLO/xObttfn7+OX35RkREMGTIEN58801H8n22c1kedcSIEfj7+zN37txK5dj+/fhGjRpFWFgYzz//PL/99ts59RpDWQK1YMEC5s6dS79+/aptd9lll5GWllahSobVauW1117Dz8/Pcfk8Ozu7wn5qtdrxZV4+PMDX1xeg0mz5c7F06VLeeecdBg4cyKWXXlptO41Gg0qlwmazObYdPXq00ipm5cneG2+8UWH7+ay0eNlllwGwYMGCCtvnz58P4EjScnNzK53n8qS2/Lnz8fEBXHvuRo8ejVqtZvbs2ZV6bs+nt7yq57yq95aiKBUqmZSr7vy7eo5qw26388EHH9C+fXvefvttrrjiikrlxqp6HZ8vX1/fKqtB/Ht4SEREBNHR0U6HzgwcOBAoG0fsqj59+hAREcHixYsrHP/HH39k3759VVZgef311x0/K4rC66+/jk6nq/G9VVpaWmWP9pw5c1AUhZEjR1a6bevWrY7HJER1pOdYiPNw//33YzQaGTNmDB07dsRsNrN+/XqWLVtGXFwckyZNAsqSz/JezbvvvpuioiLefvttIiIiqkxwnVm4cCEXXXQR3bp1484776RNmzakp6ezYcMGTp48yY4dO2p1vICAAF5++WXuuOMO+vbty80330xwcDA7duzAaDRWqCms0+m48cYbef3119FoNBUmytXWgw8+6LTNXXfdxZtvvsnEiRPZunUrcXFxfPnll6xbt44FCxY4xp7ecccd5OTkcMkll9CqVSuOHTvGa6+9Rs+ePR29pj179kSj0fD888+Tn5+PXq931J6uyZdffomfnx9ms9mxWtu6devo0aOHY+hMdS6//HLmz5/PyJEjufnmm8nIyGDhwoUkJCSwc+dOR7vExESuvfZaFixYQHZ2NgMGDOC3335z9KCdS693jx49mDBhAm+99RZ5eXkMHjyYTZs28eGHHzJ69GiGDh0KwIcffsgbb7zBmDFjaNu2LYWFhbz99tsEBAQ4Emxvb286d+7MsmXLaN++PSEhIXTt2rXKceoJCQn83//9H3PmzGHQoEFcc8016PV6Nm/eTHR0tEtL+Lr6nHfs2JG2bdvyyCOPcOrUKQICAvjf//5X5TjcxMREAB544AGSkpLQaDTceOONLp8jV23ZsoX777+fv/76i5tuuokXXniBkJAQEhMTnb6Oz1diYiKrV69m/vz5REdHEx8fT4cOHWjVqhXXXXcdPXr0wM/Pj9WrV7N582ZeeumlGo/Xpk0bunbtyurVqx11r53R6XQ8//zzTJo0icGDB3PTTTeRnp7OK6+8QlxcnGM4WTmDwcDKlSuZMGEC/fv358cff+SHH37gySefrLGHNy0tjV69enHTTTc5erh/+uknVqxYwciRI7n66qsrtM/IyGDnzp3cd999Lj0O0YzVeX0MIZqQH3/8UbntttuUjh07Kn5+foqXl5eSkJCg3H///ZVKBS1fvlzp3r27YjAYlLi4OOX5559X3nvvPQVQUlJSHO1cKeWmKIqSnJysjB8/XomKilJ0Op3SsmVL5YorrlC+/PJLR5vyUm7/LtH166+/VlnSbPny5coFF1ygeHt7KwEBAUq/fv2UTz/9tNLj3rRpkwIoI0aMcPm5claiqxxVrJCXnp6uTJo0SQkLC1O8vLyUbt26VXo+vvzyS2XEiBFKRESE4uXlpbRu3Vq5++67ldTU1Art3n77baVNmzaKRqNxWtatPObyfwaDQWnVqpVyxRVXKO+9916FUnrlqirl9u677yrt2rVT9Hq90rFjR+X999+vVP5MURSluLhYue+++5SQkBDFz89PGT16tHLgwAEFUJ577rlKcf37uSw/32e/niwWizJr1iwlPj5e0el0SkxMjDJt2rQKsf/999/KTTfdpLRu3VrR6/VKRESEcsUVV1RanW39+vVKYmKi4uXlVaHcWFWPRVEU5b333lN69eql6PV6JTg4WBk8eLCyatWqap/vc33O9+7dqwwbNkzx8/NTwsLClDvvvFPZsWNHpfeN1WpV7r//fiU8PFxRqVQVYnb1HFXl7FJud955p6JSqZRu3bopa9eurdDOldexolRfys2V871//37l4osvVry9vRVAmTBhgmIymZRHH31U6dGjh+Lv76/4+voqPXr0UN544w2nj01RFGX+/PmKn59flSXzFKX6FfKWLVvmOP8hISHKuHHjlJMnT1ZoU/7cJScnKyNGjFB8fHyUyMhIZcaMGZXKAP5b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atLT0wkLC0Oj0ZCenk5hYdnk2PT0dKxWq6MnOT09naioqAr7FhUVARAaGkp6erqjjUajwWQyoSgKq1evBiA7O5uTJ0/y8ccfYzabMZvN7Nq1i3bt2gH/JMH/ZjKZ0Gq1REVFsXnzZr799lv279/PokWLuO2228jPz0er1fLee+957HkSzVujSo6XLVvmmGX7999/06NHD5KSkhyXaf7tq6++IjU11fFv9+7daDQarr/++grtRo4cWaHdp59+WhcPR4gmq8hk5dfDWZRaXZt0V25gbDCju0bTt3UwWhlfLITbtW3bljVr1uDl5UViYiKrV6/m119/pVWrVqxevRqTyURwcDB2u501a9YwcOBA0tPTCQgIwGAwcPz4cTQaDe3atWPNmjWsWrXK0UatVnP99dfz9ttvA3DRRRcRERHBLbfcglarRa1W061bN77//nt0Op2jB3rr1q1AWTJernxox4YNG9i+fTvvvvsuAFOnTsXf35/t27c7xlEL4W6NqibS/PnzHbNsAceM1/fee48nnniiUvuQkJAKv3/22Wf4+PhUSo71en2Fv46FEOdnf0YhNrvrFYxVQKsgb+JCfD0XlBCCq666itdff50+ffowduxYHn30UQwGA4899hizZ89GURT27NnDvffeS0ZGBidOnOC3335Dr9djsVjYv38/kZGRqFQqfvjhB9RqNS1atGDlypWUlpZy44038scffwAwdOhQTpw4QWJiIlarlc8++wxfX1+Sk5NZsWIFUNYbPW7cOJ566ilWr16NSqUiMjKS7OxsvvzyS3x8fDCbzcybN48LL7yQrl27olar6dq1a30+jaKJazTJcfnM2mnTpjm2qdVqhg0bxoYNG1w6xrvvvsuNN96Ir2/FL+C1a9cSERFBcHAwl1xyCf/9738JDQ11a/xCNAcWm52T+SUcyTa6XJFCBXhp1PSMDvRkaEI0S0VFRRw+fNjxe8uWLXnooYd48sknycrKws/PD7PZzLPPPktMTAynTp0iPz+f5cuXk5CQwPr169m+fXuFY6alpZGWlkZISAgajYavvvoKKBtTfM8999C9e3euuOIKPvzwQ0wmEydOnCAlJQW1Ws3ff//Ntdde6+g1ttvtHDhwgFtvvbXC8QFHR1ZcXBxjx47liSee4JtvvvHgsyVEmUaTHJ89s/ZskZGR7N+/3+n+mzZtYvfu3Y5L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H6hp06YF/7+trQ3l5eVYsmQJli5dGrzd5/MhLS1twL+LiGiwMDkmIopjJpMJJSUlJ93ucDiwYsWKbjO3XfR6PQ4fPoyLLroIN954Ix566CFYrVZ8+umnWLJkCTweT5/JsSRJEEJ0u62nDXddiXpXPADwl7/8BTNmzOg2rmuNNBFRImByTESUgE477TTs27evx8QZALZt24ZAIIDHH38cstyx9/qVV17pNkar1cLv9590bFZWFqqqqoLfHzhwAE6ns894cnJykJeXh0OHDmHRokXh3h0iorjB5JiIKAHdd999uOiii1BYWIj//M//hCzL2LVrF7766iv86le/QklJCbxeL5588klcfPHF2LhxI5566qlu5ygqKoLD4cCHH36ISZMmwWg0wmg0Ys6cOfj973+PmTNnwu/34+6774ZGowkZ04oVK3DbbbchLS0NCxcuhNvtxtatW9HU1IQ77rijx2McDke3us0VFRXYuXMnrFYrCgsLB/aPRETUDyzlRkSUgBYsWIC3334b69atw+mnn44zzjgDv/nNbzB8+HAAwKRJk7BmzRo88sgjmDBhAl588UWsWrWq2zlmzZqFG264AT/60Y+QlZWFRx99FADw+OOPo6CgAGeddRauuuoq/OxnP1O0Rvn666/H008/jWeffRYTJ07E7Nmz8dxzz/VZl3nr1q2YMmUKpkyZAgC44447MGXKFNx33339/achIhoQSXx3YRkRERER0RDFmWMiIiIiok5MjomIiIiIOjE5JiIiIiLqxOSYiIiIiKgTk2MiIiIiok5MjomIiIiIOjE5JiIiIiLqxOSYiIiIiKgTk2MiIiIiok5MjomIiIiIOjE5JiIiIiLqxOSYiIiIiKjT/wcr5zmR4Y7p/QAAAABJRU5ErkJggg==\n"
          },
          "metadata": {}
        },
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "Normalized saliency values saved to normalized_saliency_values.csv\n",
            "Normalized Saliency Top-k:\n",
            "     Saliency\n",
            "239  1.000000\n",
            "240  0.130058\n",
            "479  0.060915\n",
            "241  0.041254\n",
            "242  0.040425\n",
            "Normalized Saliency Max: Saliency    1.0\n",
            "dtype: float32\n",
            "Normalized Saliency Min: Saliency    0.0\n",
            "dtype: float32\n",
            "Normalized Saliency Mean: Saliency    0.011239\n",
            "dtype: float32\n",
            "Normalized Saliency Median: Saliency    0.011288\n",
            "dtype: float32\n",
            "Normalized Saliency Mode:    Saliency\n",
            "0  0.000216\n",
            "Normalized Saliency Sum: Saliency    5.394928\n",
            "dtype: float32\n",
            "#\n",
            "#\n",
            "#\n",
            "Normalized Saliency Standard Deviation: Saliency    0.046552\n",
            "dtype: float32\n",
            "Normalized Saliency Skewness: Saliency    20.124352\n",
            "dtype: float32\n",
            "Normalized Saliency Kurtosis: Saliency    427.309418\n",
            "dtype: float32\n",
            "Normalized Saliency Variance: Saliency    0.002167\n",
            "dtype: float32\n",
            "Normalized Saliency Coefficient of Variation: Saliency    414.187775\n",
            "dtype: float32\n",
            "#\n",
            "#\n",
            "#\n",
            "Cumulative Sum of Normalized Saliency Values:      Saliency\n",
            "0    0.000216\n",
            "1    0.000432\n",
            "2    0.000648\n",
            "3    0.000864\n",
            "4    0.001079\n",
            "..        ...\n",
            "475  5.275759\n",
            "476  5.294977\n",
            "477  5.314198\n",
            "478  5.334014\n",
            "479  5.394929\n",
            "\n",
            "[480 rows x 1 columns]\n",
            "Mean of Cumulative Sum of Normalized Saliency Values:          Saliency\n",
            "0    4.497705e-07\n",
            "1    8.995410e-07\n",
            "2    1.349312e-06\n",
            "3    1.799082e-06\n",
            "4    2.248853e-06\n",
            "..            ...\n",
            "475  1.099116e-02\n",
            "476  1.103120e-02\n",
            "477  1.107125e-02\n",
            "478  1.111253e-02\n",
            "479  1.123944e-02\n",
            "\n",
            "[480 rows x 1 columns]\n",
            "Normalized Saliency Root Mean Square: 0.04784279\n",
            "Normalized Saliency 25th Percentile: Saliency    0.00032\n",
            "Name: 0.25, dtype: float64\n",
            "Normalized Saliency 75th Percentile: Saliency    0.01644\n",
            "Name: 0.75, dtype: float64\n",
            "Normalized Saliency Interquartile Range: Saliency    0.01612\n",
            "dtype: float64\n"
          ]
        }
      ]
    },
    {
      "cell_type": "code",
      "source": [
        "seconds = time.time()\n",
        "print(\"Time in seconds since end of run:\", seconds)\n",
        "local_time = time.ctime(seconds)\n",
        "print(local_time)"
      ],
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 0
        },
        "id": "wfZCzuq9KY9b",
        "outputId": "afb848aa-670a-4cea-b535-28b159dd184a"
      },
      "execution_count": 45,
      "outputs": [
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "Time in seconds since end of run: 1712720692.2963688\n",
            "Wed Apr 10 03:44:52 2024\n"
          ]
        }
      ]
    }
  ]
}